<?php
//Ultima verificacion: 14-10-2014 ; 21-11-2014 ; 20-02-2015
class M_mensaje extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener los mensajes recibidos por un usuario
	//R = REMITENTE
	function buscarR($restriccion=null, $limite=null){
		$consulta = $this->db->query("SELECT mensaje.*, persona.apellido, persona.nombre,
											 (SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											 DATE_FORMAT(mensaje.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada
									  FROM mensaje, persona
									  WHERE mensaje.idRemitente=persona.idPersona AND persona.estado<>-1 $restriccion
									  ORDER BY mensaje.idMensaje DESC
									  $limite");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los mensajes enviados por un usuario
	//D = DESTINATARIO
	function buscarD($restriccion=null){
		$consulta = $this->db->query("SELECT mensaje.*, persona.apellido, persona.nombre,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											DATE_FORMAT(mensaje.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada
									  FROM mensaje, persona
									  WHERE mensaje.idDestinatario=persona.idPersona AND persona.estado<>-1 $restriccion
									  ORDER BY mensaje.idMensaje DESC");
		return($consulta);
	}
			
	//Este metodo se utiliza para eliminar un mensaje (Cuando lo elimina el remitente)
	function eliminarR($idMensaje=null, $idDestructor=null, $estado=null){
		$consulta = $this->db->query("UPDATE `mensaje` 
									 SET `estadoRemitente` = ". $this->db->escape($estado) .",
										 `idDestructorRemitente` = ". $this->db->escape($idDestructor) ."
							         WHERE `mensaje`.`idMensaje` = " . $this->db->escape($idMensaje) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para eliminar un mensaje (Cuando lo elimina el destinatario)
	function eliminarD($idMensaje=null, $idDestructor=null, $estado=null){
		$consulta = $this->db->query("UPDATE `mensaje` 
									 SET `estadoDestinatario` =  ". $this->db->escape($estado) .",
										 `idDestructorDestinatario` = ". $this->db->escape($idDestructor) ."
							         WHERE `mensaje`.`idMensaje` = " . $this->db->escape($idMensaje) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear un mensaje
	function crear($idRemitente=null, $idDestinatario=null, $asunto=null, $mensaje=null, $idCreador=null){
		$this->db->query("INSERT INTO `mensaje` (`idMensaje`,`idRemitente`,`idDestinatario`,`asunto`,`mensaje`,`fechaCreacion`,`idCreador`) VALUES 
										        (NULL,".$this->db->escape($idRemitente).",".$this->db->escape($idDestinatario).",".$this->db->escape($asunto).",".$this->db->escape($mensaje).",now(),".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un mensaje en particular usado generalmente para visualizar el mensaje
	function get($idMensaje=null, $restriccion=null){
		$consulta = $this->db->query("SELECT mensaje.*, persona.apellido, persona.nombre,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											DATE_FORMAT(mensaje.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada
									  FROM mensaje, persona
									  WHERE mensaje.idRemitente=persona.idPersona AND 
									        (mensaje.estadoRemitente<>-1 OR mensaje.estadoDestinatario<>-1) AND persona.estado<>-1 AND 
										    mensaje.idMensaje=".$this->db->escape($idMensaje)." $restriccion
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver el mensaje contiguo a uno en particular usado generalmente en el formulario de visualizar
	function getContiguo($idMensaje=null, $cant=null, $idPersona=null, $tipo=null){
		//Bandeja de Entrada. Buscamos solo los mensajes en donde el usuario (destinatario) no los haya borrado.
		if($tipo == 1){
			do{
				$idMensaje+=$cant;
				$consulta = $this->db->query("SELECT mensaje.*
											  FROM mensaje
											  WHERE	mensaje.idMensaje=".$this->db->escape($idMensaje)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estadoDestinatario=='-1' || $consulta->row()->idDestinatario != $idPersona);
		}
		
		//Bandeja de Salida. Buscamos solo los mensajes en donde el usuario (remitente) no los haya borrado.
		if($tipo == 2){
			do{
				$idMensaje+=$cant;
				$consulta = $this->db->query("SELECT mensaje.*
											  FROM mensaje
											  WHERE	mensaje.idMensaje=".$this->db->escape($idMensaje)."
											  LIMIT 1");
				if($consulta->num_rows == 0)
					return(0);
				
			}while($consulta->row()->estadoRemitente=='-1' || $consulta->row()->idRemitente != $idPersona);
		}
		
		return($consulta->row()->idMensaje);
	}
	
	//Este metodo se utiliza para modificar un mensaje
	function modificar($idMensaje=null, $leido=null){
		$consulta = $this->db->query("UPDATE `mensaje` 
									 SET `leido` = ". $this->db->escape($leido) ."										
							         WHERE `mensaje`.`idMensaje` = " . $this->db->escape($idMensaje) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>